/**
 * Created by andot on 2017/4/25.
 * 身份证号码工具类
 *
 *
 */
var IDCardTools = function() {
    /*
    * idcard 身份证号码校验
    * author： andot
    * */
    IDCardTools.prototype.verify = function(code){
        var city={
            11:"北京",
            12:"天津",
            13:"河北",
            14:"山西",
            15:"内蒙古",
            21:"辽宁",
            22:"吉林",
            23:"黑龙江 ",
            31:"上海",
            32:"江苏",
            33:"浙江",
            34:"安徽",
            35:"福建",
            36:"江西",
            37:"山东",
            41:"河南",
            42:"湖北 ",
            43:"湖南",
            44:"广东",
            45:"广西",
            46:"海南",
            50:"重庆",
            51:"四川",
            52:"贵州",
            53:"云南",
            54:"西藏 ",
            61:"陕西",
            62:"甘肃",
            63:"青海",
            64:"宁夏",
            65:"新疆",
            71:"台湾",
            81:"香港",
            82:"澳门",
            91:"国外 "
        };
        var tip = "";
        var pass= true;
        if(!code || !/^[1-9][0-9]{5}(19[0-9]{2}|200[0-9]|2010)(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9xX]$/i.test(code)){
            tip = "身份证号格式错误";
            pass = false;
        }else if(!city[code.substr(0,2)]){
            tip = "地址编码错误";
            pass = false;
        }
        else{
            //18位身份证需要验证最后一位校验位
            if(code.length == 18){
                code = code.split('');
                //∑(ai×Wi)(mod 11)
                //加权因子
                var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
                //校验位
                var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
                var sum = 0;
                var ai = 0;
                var wi = 0;
                for (var i = 0; i < 17; i++)
                {
                    ai = code[i];
                    wi = factor[i];
                    sum += ai * wi;
                }
                var last = parity[sum % 11];
                if(last != code[17]){
                    tip = "校验编码错误";
                    pass =false;
                }
            }
        }
        console.log(tip);
        return pass;
    }

}